/****************************************Copyright (c)****************************************************

**--------------File Info---------------------------------------------------------------------------------
** File name:                app_task.h
** Last modified Date:       2024.11.18
** Last Version:             Ver:1.0
** Descriptions:             温控任务
**
**--------------------------------------------------------------------------------------------------------
** Created by:               adm
** Created date:             2024.11.18
** Version:                  Ver:1.0
** Descriptions:             温控任务
**--------------------------------------------------------------------------------------------------------*/
#ifndef APPTASK_H
#define APPTASK_H

#include "at32f415_wk_config.h"

/* User defines -------------------------------------------------------------*/
#define ALARM_TEMP_MAX                          (80.0)      //最大告警温度
#define SET_TEMP_MAX                            (60.0)      //最高恒温温度
#define SET_DAY_MAX                             (7)         //最长定时天数
#define ERROR_COUNT_MAX                         (50)        //读取错误计数器最大值，超出关闭加热，并给出提示音

//音阶频率宏定义
#define L1                                      262
#define L1S                                     277
#define L2                                      294
#define L2S                                     311
#define L3                                      330
#define L4                                      349
#define L4S                                     370
#define L5                                      392
#define L5S                                     415
#define L6                                      440
#define L6S                                     466
#define L7                                      494
#define M1                                      523
#define M1S                                     554
#define M2                                      587
#define M2S                                     622
#define M3                                      659
#define M4                                      698
#define M4S                                     740
#define M5                                      784
#define M5S                                     831
#define M6                                      880
#define M6S                                     932
#define M7                                      988
#define H1                                      1046
#define H1S                                     1109
#define H2                                      1175
#define H2S                                     1245
#define H3                                      1318
#define H4                                      1397
#define H4S                                     1480
#define H5                                      1568
#define H5S                                     1661
#define H6                                      1760
#define H6S                                     1865
#define H7                                      1976
#define TONE_NULL                               1


/* User Data structure defines -------------------------------------------------------------*/
//用户数据结构
typedef union {
    /* select data */
    struct {
        uint8_t mode_select   : 2;      //主机模式选择 0 使能温度计模式    1 使能温控器模式
        uint8_t filter_mode   : 1;      //滤波模式选择 0 不滤波    1 滤波
        uint8_t sensor_select : 2;      //传感器选择 0 使能内置传感器  1 使能外置传感器  2 内置、外置都使能
        uint8_t none_use      : 3;      //未使用
    };
    uint8_t data;
} select_data_t;

typedef struct {
    uint16_t user_set_temp;
    uint16_t user_alarm_temp;
    uint16_t user_set_time;
    uint16_t Kp;                //用户PID参数   K值放大10倍，保留一位小数， I值放大100倍，保留两位小数， D值放大10倍，保留一位小数
    uint16_t Ki;
    uint16_t Kd;
    uint8_t scr_save_time;      //屏幕保护时间，0-255，单位 分钟，仅在温控模式起作用
    uint8_t shutdown_time;      //进入待机等待时间，0-255，单位秒，仅在温度计模式起作用
    select_data_t select_data;  //主机功能选择数据
    uint8_t free_data;          //空闲未使用
} user_save_data_t;

/* exported value ------------------------------------------------------- */
extern __IO float shtxx_t_A;
extern __IO float shtxx_h_A;
extern __IO float shtxx_t_B;
extern __IO float shtxx_h_B;

//设定参数全局变量
extern __IO float set_temp;                     //设定温度
extern __IO float alarm_temp;                   //告警温度
extern __IO uint16_t set_time;                  //设定恒温时长，单位分钟
extern __IO uint16_t current_time;              //当前时间，单位分钟
extern __IO uint8_t ctrl_start;                 //恒温控制启动  0 停止   1 启动
extern __IO int16_t pwm_value;                  //温控pwm值
extern __IO uint16_t voltage;                   //电压全局变量

//保存用户数据结构体变量
extern user_save_data_t user_save_data;

//系统标志
extern __IO uint8_t Interface_flag;             //当前界面标志  0 控制界面   1 设置菜单界面
extern __IO uint8_t timed_comp_flag;            //定时任务完成标志  0 未完成    1 已完成
extern __IO uint16_t Screensavers_count;        //屏保计数器
extern __IO uint32_t Shutdown_count;            //自动关机计数器
extern __IO uint64_t current_second;            //当前秒计数值

////提示音全局变量
extern __IO int8_t playback_group;              //提示音播放变量  -1 无播放  0 播放第一组  1 播放第二组 ....
extern __IO uint8_t alarm_status_flag;          //报警提示音标志    0 不报警    1 发出报警音

//提示音乐谱
extern const uint16_t tone0[8];
extern const uint16_t tone1[8];
extern const uint16_t tone2[8];
extern const uint16_t tone3[8];


/* exported functions --------------- */
void Task_Init(void);
uint16_t get_voltage_value(void);
void tone(uint16_t freq, uint16_t time_ms);
void music(const uint16_t *music_data, uint16_t length);
#endif
